home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / mpeg_play-2.1 / util32.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  3KB  |  134 lines

  1. /* 
  2.  * util32.c --
  3.  *
  4.  *      Miscellaneous functions that deal with 32 bit color displays.
  5.  *
  6.  */
  7.  
  8. extern int matched_depth;
  9.  
  10. /*
  11.  * Copyright (c) 1995 The Regents of the University of California.
  12.  * All rights reserved.
  13.  * 
  14.  * Permission to use, copy, modify, and distribute this software and its
  15.  * documentation for any purpose, without fee, and without written agreement is
  16.  * hereby granted, provided that the above copyright notice and the following
  17.  * two paragraphs appear in all copies of this software.
  18.  * 
  19.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  20.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  21.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  22.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23.  * 
  24.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  25.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  26.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  27.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  28.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  29.  */
  30.  
  31. #include <stdio.h>
  32. #include <X11/Xlib.h>
  33. #include <X11/Xutil.h>
  34. #include "video.h"
  35. #include "proto.h"
  36.  
  37.  
  38. /*
  39.  *--------------------------------------------------------------
  40.  *
  41.  * FindFullColorVisual
  42.  *
  43.  *  Returns a pointer to a full color bit visual on the display
  44.  *
  45.  * Results:
  46.  *      See above.
  47.  *  
  48.  * Side effects:
  49.  *      Unknown.
  50.  *
  51.  *--------------------------------------------------------------
  52.  */
  53. Visual *
  54. FindFullColorVisual (dpy, depth)
  55.      Display *dpy;
  56.      int *depth;
  57. {
  58.   XVisualInfo vinfo;
  59.   XVisualInfo *vinfo_ret;
  60.   int numitems, maxdepth;
  61.   
  62.   vinfo.class = TrueColor;
  63.   
  64.   vinfo_ret = XGetVisualInfo(dpy, VisualClassMask, &vinfo, &numitems);
  65.   
  66.   if (numitems == 0) return NULL;
  67.  
  68.   maxdepth = 0;
  69.   while(numitems > 0) {
  70.     if (vinfo_ret[numitems-1].depth > maxdepth) {
  71.       maxdepth = vinfo_ret[numitems-1 ].depth;
  72.     }
  73.     numitems--;
  74.   }
  75.   XFree(vinfo_ret);
  76.  
  77.   if (maxdepth < 16) return NULL;
  78.  
  79.   if (XMatchVisualInfo(dpy, DefaultScreen(dpy), maxdepth, 
  80.                TrueColor, &vinfo)) {
  81.     *depth = maxdepth;
  82.     return vinfo.visual;
  83.   }
  84.   
  85.   return NULL;
  86. }
  87.  
  88.  
  89. /*
  90.  *--------------------------------------------------------------
  91.  *
  92.  * CreateFullColorWindow
  93.  *
  94.  *  Creates a window capable of handling 32 bit color.
  95.  *
  96.  * Results:
  97.  *      See above.
  98.  *  
  99.  * Side effects:
  100.  *      Unknown.
  101.  *
  102.  *--------------------------------------------------------------
  103.  */
  104. Window
  105. CreateFullColorWindow (dpy, x, y, w, h)
  106.      Display *dpy;
  107.      int x, y;
  108.      unsigned int w, h;
  109. {
  110.   int depth;
  111.   Visual *visual;
  112.   XSetWindowAttributes xswa;
  113.   unsigned int mask;
  114.   unsigned int class;
  115.   int screen;
  116.  
  117.   screen = XDefaultScreen(dpy);
  118.   class = InputOutput;    /* Could be InputOnly */
  119.   visual = FindFullColorVisual (dpy, &depth);
  120.   matched_depth = depth;
  121.   if(matched_depth == 24) matched_depth = 32;
  122.   if (visual == NULL) {
  123.     return 0;
  124.   }
  125.   mask = CWBackPixel | CWColormap | CWBorderPixel;
  126.   xswa.colormap = XCreateColormap(dpy, XRootWindow(dpy, screen),
  127.     visual, AllocNone);
  128.   xswa.background_pixel = BlackPixel(dpy, DefaultScreen(dpy));
  129.   xswa.border_pixel = WhitePixel(dpy, DefaultScreen(dpy));
  130.  
  131.   return XCreateWindow(dpy, RootWindow(dpy, screen), x, y, w, h,
  132.     1, depth, class, visual, mask, &xswa);
  133. }
  134.